Javascript - Operações Variáveis

Há muitas controvérsias sobre o que o JavaScript deveria fazer se fosse correto e o que ele realmente faz mas aqui mostraremos o que ele faz, se correto ou não não nos interessa neste documento.
Só para te dar uma ideia da controvérsia, em JavaScript 1+1=11 e 1-1=0.

Operações aritméticas com variáveis JavaScript

Súmula Operação Variável1 Operação Variável2 Resultado Operação Efetuada
String+String '123' + '2' '1232' Soma de string convencional
String-String '123' - '2' 121 Converteu ambos operandos para número
String*String '123' * '2' 246 Converteu ambos operandos para número
String/String '123' / '2' 61,5 Converteu ambos operandos para número
Número+Número 123 + 1 124 Operação de soma numérica convencional
Número+String 123 + '123' '123123' Converteu ambos operandos para string
Boolean+Boolean False + False 0 Converteu boolean False para zero
Boolean+Boolean True + True 2 Converteu boolean True para um
Boolean+Número True + 5 6 Converteu boolean True para um
Boolean+Número False + 9 9 Converteu boolean False para zero
Boolean+String False + 123 false123 Converteu o boolean para string False e somou os strings
Boolean+String True + 123 true123 Converteu o boolean para string False e somou os strings
String+Boolean 123 + True 123true Converteu o boolean para string False e somou os strings
String+Boolean 123 + False 123false Converteu o boolean para string False e somou os strings
Variável Nova+Número ??? + 2 Número A variável tem seu tipo e valor indefinido.

Notas:
   1-Apóstrofo indica variável tipo string
   2-Boolean quando convertido para Numérico : True=1, 0=False
   3-Boolean quando convertido para String : True ou False
   4-Os tipos possíveis de variáveis em JavaScript são : Boolean, String, Numérico, Array, Função e Objeto
   5-Quando uma variável é definida e nada é atribuida a ela o valor e o tipo dela é indefinido(undefined)
   6-Há um tipo chamado constante que pode ser de todos os tipos de variáveis acima.

Importante :
1-1-JavaScript é uma linguagem fracamente tipada, ou seja, uma variável pode conter diferentes tipos de valores, ou seja, pode ser numérica, alfabética, booleana, a mesma variável. Portanto em javascript é muito fácil ter mudanças de escopo numa mesma variável dependendo de seu valor e o JavaScript determina como ela deverá ser tratada, por exemplo, podemos somar um string com um número que produzirá um valor e a operação contrária provavelmente trará outro valor (lembre-se que a propriedade comutativa da adição garante que a troca dos fatores não altera o resultado, não em JavaScript).

Por exemplo : Uma matriz é um conjunto de elementos. Normalmente de mesmo tipo. Uma matriz, certo?.
   Contudo ao selecionarmos um elemento da matriz ( como matriz[0] ) estaremos trabalhando    com outro tipo de elemento, não matriz mas um simples string, número.
Por este motivo um matriz.split(","); dá erro mas matriz[0].split(","); não, a primeira é um array e o segundo um string.